package com.server.store;

import java.util.HashMap;
import java.util.Map;


import com.server.store.context.UserManager;
import com.server.store.data.DataManager;
import com.shared.data.IData;
import com.shared.data.TypeIData;
/**
 * Flyweight pour les manager des {@link IData} dans le DataStore
 * @author queyroi
 *
 */
public class PoolManager {
	
	private static PoolManager instance;
	private Map<TypeIData, DataManager<? extends IData>> poolDataManager;
	
	private PoolManager(){
		poolDataManager = new HashMap<TypeIData, DataManager<? extends IData>>();		
	}
	
	public final synchronized static PoolManager get() {
		if(instance==null) instance = new PoolManager();
		return instance;
	}
	/**
	 * Récupération du DAO (création si non en mémoire)
	 * @param type {@link TypeIData}
	 * @return
	 */
	public synchronized DataManager<? extends IData> getDataManager(TypeIData type){
		if(poolDataManager.get(type)==null){
			poolDataManager.put(type,DataManagerFactory.get().getDataManager(type));
		}
		return poolDataManager.get(type);
	}
	/**
	 * Récupération du DAO de gestion des utilisateurs
	 * @return
	 */
	public synchronized UserManager getUserManager(){
		if(poolDataManager.get(TypeIData.USER)==null){
			poolDataManager.put(TypeIData.USER,DataManagerFactory.get().getDataManager(TypeIData.USER));
		}
		return (UserManager) poolDataManager.get(TypeIData.USER);
	}
	

	
	
}
